package com.wf.course.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.utils.page.PageBean;
import com.wf.course.model.log.LoginLogs;
import com.wf.course.model.user.Role;
import com.wf.course.model.user.User;
import com.wf.course.model.user.UserRoleRelation;

/**
 * 系统用户数据持久
 * @author lyinlong
 *
 */
public interface IUserMapper {

	/**
	 * 通过 编号/用户名/手机号 获取
	 * @param value  查询值
	 * @param type   查询类型   1:编号   2:用户名   3:手机号
	 * @return
	 */
	User getById_Name_Telephone(@Param("value") String value,@Param("type") Integer type);
	
	/**
	 * 添加用户信息
	 * @param user
	 * @return
	 */
	Integer addUser(User user);

	/**
	 * 修改用户密码
	 * @param id
	 * @param password
	 * @return
	 */
	Boolean updatePassword(@Param("id") Integer id, @Param("password") String password);
	
	//////////////用户管理///////////////
	
	/**
	 * 根据pageBean中封装的查询条件查询
	 * @param pageBean
	 * @return
	 */
	public List<User> queryList(PageBean<User> pageBean);
	/**
	 * 查询总数量
	 * @param pageBean
	 * @return
	 */
	public Long getTotalCount(PageBean<User> pageBean);
	/**
	 * 添加
	 * @param 
	 */
	public void saveUser(User user);
	/**
	 * 修改
	 * @param 
	 */
	public void updateUser(User user);
	/**
	 * 查询用户
	 * @param userId
	 */
	public User querUserByUserId(@Param("id")Integer id);
	/**
	 * 查询用户的角色信息
	 */
	public List<UserRoleRelation> initUserRole(@Param("userID")Integer userID);
	/**
	 * 删除
	 * @param id
	 */
	public void deleteById(@Param("id")Integer id,@Param("status")Integer status);
	/**
	 * 角色
	 */
	public List<Role> initRole();
	//给用户添加角色
	public void addUserRole(@Param("userID")Integer userID, @Param("roleID")Integer roleID,@Param("createTime")String createTime);
	//删除用户所有角色
	public void deleteAllUserRole(@Param("userID")Integer userID);
	public void deleteUserRoleByUserIDAndRoleID(@Param("userID")Integer userID,@Param("roleID")Integer roleID);
	
	/**
	 * 	添加系统用户登录日志
	 */
	public void addSysUserLogs(LoginLogs log);
	
	/**
	 * 修改用户状态
	 */
	public void updateUserStatus(@Param("id")Integer id,@Param("status")Integer status);
	
}
